package com.dyj.applet.client;

import com.dtflys.forest.annotation.BaseRequest;
import com.dtflys.forest.annotation.JSONBody;
import com.dtflys.forest.annotation.Post;
import com.dyj.applet.domain.QueryAndCalculateMarketingResult;
import com.dyj.applet.domain.QueryCertificatesOrderInfo;
import com.dyj.applet.domain.QueryIndustryItemOrderInfo;
import com.dyj.applet.domain.query.*;
import com.dyj.applet.domain.vo.*;
import com.dyj.common.domain.DataAndExtraVo;
import com.dyj.common.domain.DySimpleResult;
import com.dyj.common.domain.vo.BaseVo;
import com.dyj.common.interceptor.ClientTokenInterceptor;

import java.util.List;

/**
 * 交易系统 生活服务交易系统
 */
@BaseRequest(baseURL = "${domain}")
public interface IndustryTransactionClient {


    /**
     * 查询订单基本信息。
     * @param body 查询订单基本信息。请求值
     * @return
     */
    @Post(value = "${queryIndustryOrder}", interceptor = ClientTokenInterceptor.class)
    DataAndExtraVo<QueryIndustryOrderVo> queryIndustryOrder(@JSONBody QueryIndustryOrderQuery body);

    /**
     * 查询券状态信息
     * @param body 查询券状态信息请求值
     * @return
     */
    @Post(value = "${queryIndustryItemOrderInfo}", interceptor = ClientTokenInterceptor.class)
    DataAndExtraVo<QueryIndustryItemOrderInfoVo> queryIndustryItemOrderInfo(@JSONBody QueryIndustryItemOrderInfoQuery body);

    /**
     * 生活服务交易系统->查询 CPS 信息
     * @param body 查询 CPS 信息请求值
     * @return
     */
    @Post(value = "${queryIndustryOrderCps}", interceptor = ClientTokenInterceptor.class)
    DataAndExtraVo<QueryIndustryCpsVo> queryIndustryOrderCps(@JSONBody QueryIndustryOrderCpsQuery body);

    /**
     * 生活服务交易系统->预下单->开发者发起下单
     * @param body
     * @return
     */
    @Post(value = "${preCreateIndustryOrder}", interceptor = ClientTokenInterceptor.class)
    DySimpleResult<PreCreateIndustryOrderVo> preCreateIndustryOrder(@JSONBody PreCreateIndustryOrderQuery body);

    /**
     * 生活服务交易系统->营销算价->查询营销算价
     * @param body
     */
    @Post(value = "${queryAndCalculateMarketing}",interceptor = ClientTokenInterceptor.class)
    DySimpleResult<QueryAndCalculateMarketingResult> queryAndCalculateMarketing(@JSONBody QueryAndCalculateMarketingQuery body);

    /**
     * 生活服务交易系统->核销->抖音码->验券准备
     * @param body 验券准备请求值
     * @return
     */
    @Post(value = "${deliveryPrepare}", interceptor = ClientTokenInterceptor.class)
    DataAndExtraVo<DeliveryPrepareVo> deliveryPrepare(@JSONBody DeliveryPrepareQuery body);


    /**
     * 生活服务交易系统->核销->抖音码->验券
     * @param body 验券请求值
     * @return
     */
    @Post(value = "${deliveryVerify}", interceptor = ClientTokenInterceptor.class)
    DataAndExtraVo<DeliveryVerifyVo> deliveryVerify(@JSONBody DeliveryVerifyQuery body);

    /**
     * 生活服务交易系统->核销->抖音码->
     * 生活服务交易系统->核销->三方码->撤销核销
     * @param body 撤销核销请求值
     * @return
     */
    @Post(value = "${verifyCancel}", interceptor = ClientTokenInterceptor.class)
    DataAndExtraVo<BaseVo> verifyCancel(@JSONBody VerifyCancelQuery body);

    /**
     * 生活服务交易系统->核销->三方码->推送核销状态
     * @param body 推送核销状态请求值
     * @return
     */
    @Post(value = "${pushDelivery}", interceptor = ClientTokenInterceptor.class)
    DataAndExtraVo<PushDeliveryVo> pushDelivery(@JSONBody PushDeliveryQuery body);

    /**
     * 生活服务交易系统->分账->查询分账
     * @param body 查询分账请求值
     * @return
     */
    @Post(value = "${industryQuerySettle}", interceptor = ClientTokenInterceptor.class)
    DataAndExtraVo<List<IndustryQuerySettleVo>> industryQuerySettle(@JSONBody IndustryQuerySettleQuery body);

    /**
     * 生活服务交易系统->退货退款->开发者发起退款
     * @param body
     * @return
     */
    @Post(value = "${developerCreateRefund}", interceptor = ClientTokenInterceptor.class)
    DataAndExtraVo<DeveloperCreateRefundVo> developerCreateRefund(@JSONBody DeveloperCreateRefundQuery body);

    /**
     * 生活服务交易系统->退货退款->同步退款审核结果
     * @param body 同步退款审核结果请求值
     * @return
     */
    @Post(value = "${refundMerchantAuditCallback}", interceptor = ClientTokenInterceptor.class)
    DataAndExtraVo<BaseVo> refundMerchantAuditCallback(@JSONBody RefundMerchantAuditCallbackQuery body);

    /**
     * 生活服务交易系统->退货退款->查询退款
     * @param body
     * @return
     */
    @Post(value = "${queryRefund}", interceptor = ClientTokenInterceptor.class)
    DataAndExtraVo<IndustryQueryRefundVo> industryQueryRefund(@JSONBody QueryRefundQuery body);

    /**
     * 生活服务交易系统->预约->创建预约单
     * @param body
     * @return
     */
    @Post(value = "createBook", interceptor = ClientTokenInterceptor.class)
    DataAndExtraVo<CreateBookVo> createBook(@JSONBody CreateBookQuery body);

    /**
     * 生活服务交易系统->预约->预约接单结果回调
     * @param body
     */
    @Post(value = "bookResultCallback", interceptor = ClientTokenInterceptor.class)
    DataAndExtraVo<Void> bookResultCallback(@JSONBody BookResultCallbackQuery body);

    /**
     * 生活服务交易系统->预约->商家取消预约
     * @param body
     */
    @Post(value = "merchantCancelBook", interceptor = ClientTokenInterceptor.class)
    DataAndExtraVo<Void> merchantCancelBook(@JSONBody MerchantCancelBookQuery body);

    /**
     * 生活服务交易系统->预约->用户取消预约
     * @param body
     */
    @Post(value = "userCancelBook", interceptor = ClientTokenInterceptor.class)
    DataAndExtraVo<Void> userCancelBook(@JSONBody UserCancelBookQuery body);

    /**
     * 生活服务交易系统->预约->查询预约单信息
     */
    @Post(value = "queryBook", interceptor = ClientTokenInterceptor.class)
    DataAndExtraVo<List<QueryBookVo>> queryBook(@JSONBody QueryBookQuery body);

    /**
     * 生活服务交易系统->预下单->关闭订单
     * @return
     */
    @Post(value = "closeOrder", interceptor = ClientTokenInterceptor.class)
    DataAndExtraVo<Void> closeOrder(@JSONBody CloseOrderQuery body);

    /**
     * 生活服务交易系统->核销->核销工具->查询用户券列表
     * @param body
     */
    @Post(value = "queryUserCertificates", interceptor = ClientTokenInterceptor.class)
    DataAndExtraVo<QueryUserCertificatesVo> queryUserCertificates(@JSONBody QueryUserCertificatesQuery body);

    /**
     * 生活服务交易系统->核销->核销工具->查询订单可用门店
     * @param body
     */
    @Post(value = "orderCanUse", interceptor = ClientTokenInterceptor.class)
    DataAndExtraVo<QueryCertificatesOrderInfo> orderCanUse(@JSONBody OrderCanUseQuery body);

    /**
     * 生活服务交易系统->核销->核销工具->设置商家展示信息
     * @param body
     */
    @Post(value = "updateMerchantConf", interceptor = ClientTokenInterceptor.class)
    DySimpleResult<Void> updateMerchantConf(@JSONBody UpdateMerchantConfQuery body);

    /**
     * 生活服务交易系统->核销->核销工具->查询商家配置文案
     * @param body
     */
    @Post(value = "tradeToolkitQueryText", interceptor = ClientTokenInterceptor.class)
    DySimpleResult<TradeToolkitQueryTextVo> tradeToolkitQueryText(@JSONBody TradeToolkitQueryTextQuery body);

    /**
     * 生活服务交易系统->核销->核销工具->设置订单详情页按钮白名单接口
     * @param body
     */
    @Post(value = "buttonWhiteSetting", interceptor = ClientTokenInterceptor.class)
    DySimpleResult<Void> buttonWhiteSetting(@JSONBody ButtonWhiteSettingQuery body);

    /**
     * 生活服务交易系统->核销->核销工具->设置小程序跳转path
     * @param body
     */
    @Post(value = "updateMerchantPath", interceptor = ClientTokenInterceptor.class)
    DySimpleResult<Void> updateMerchantPath(@JSONBody UpdateMerchantPathQuery body);


    /**
     * 生活服务交易系统->分账->发起分账
     * @param body 发起分账请求值
     * @return
     */
    @Post(value = "${createSettleV2}", interceptor = ClientTokenInterceptor.class)
    DataAndExtraVo<CreateSettleV2Vo> createSettleV2(@JSONBody CreateSettleV2Query body);

    /**
     * 行业交易系统->预下单->查询 CPS 信息
     * @param body 查询 CPS 信息请求值
     * @return
     */
    @Post(value = "${queryTradeCps}", interceptor = ClientTokenInterceptor.class)
    DySimpleResult<QueryIndustryCpsVo> queryTradeCps(@JSONBody QueryIndustryOrderCpsQuery body);

    /**
     * 行业交易系统->预下单->查询订单信息
     * @param body 查询订单信息请求值
     * @return
     */
    @Post(value = "${queryTradeOrder}", interceptor = ClientTokenInterceptor.class)
    DySimpleResult<QueryTradeOrderVo> queryTradeOrder(@JSONBody QueryTradeOrderQuery body);

    /**
     * 行业交易系统->预下单->开发者发起下单
     * @param body 开发者发起下单
     * @return
     */
    @Post(value = "${createTradeOrder}", interceptor = ClientTokenInterceptor.class)
    DySimpleResult<PreCreateIndustryOrderVo> createTradeOrder(@JSONBody CreateTradeOrderQuery body);

    /**
     * 行业交易系统->核销->抖音码->验券准备
     * @param body 验券准备请求值
     * @return
     */
    @Post(value = "${tradeDeliveryPrepare}", interceptor = ClientTokenInterceptor.class)
    DySimpleResult<TradeDeliveryPrepareVo> tradeDeliveryPrepare(@JSONBody DeliveryPrepareQuery body);

    /**
     * 行业交易系统->核销->抖音码->验券
     * @param body 验券准备请求值
     * @return
     */
    @Post(value = "${tradeDeliveryVerify}", interceptor = ClientTokenInterceptor.class)
    DySimpleResult<TradeDeliveryVerifyVo> tradeDeliveryVerify(@JSONBody DeliveryVerifyQuery body);

    /**
     * 行业交易系统->核销->抖音码->查询劵状态信息
     * @param body 查询劵状态信息请求值
     * @return
     */
    @Post(value = "${queryItemOrderInfo}", interceptor = ClientTokenInterceptor.class)
    DySimpleResult<List<QueryIndustryItemOrderInfo>> queryItemOrderInfo(@JSONBody QueryIndustryItemOrderInfoQuery body);

    /**
     * 行业交易系统->核销->三方码->推送核销状态
     * @param body 推送核销状态
     * @return
     */
    @Post(value = "${tradePushDelivery}", interceptor = ClientTokenInterceptor.class)
    DySimpleResult<TradePushDeliveryVo> tradePushDelivery(@JSONBody TradePushDeliveryQuery body);

    /**
     * 行业交易系统->分账->发起分账
     * @param body 发起分账
     * @return
     */
    @Post(value = "${tradeCreateSettle}", interceptor = ClientTokenInterceptor.class)
    DySimpleResult<CreateSettleV2Vo> tradeCreateSettle(@JSONBody CreateSettleV2Query body);

    /**
     * 行业交易系统->分账->查询分账
     * @param body 查询分账
     * @return
     */
    @Post(value = "${tradeQuerySettle}", interceptor = ClientTokenInterceptor.class)
    DySimpleResult<TradeQuerySettleVo> tradeQuerySettle(@JSONBody TradeQuerySettleQuery body);
}
